from __future__ import division
import urllib,ast

def datoselophant(nombre,server,dicconversion2,key):
##    Funcion que devuelve ratings y campeones mas jugados. Info obtenida utilizando la API de elophant.com
##    Server puede ser [euw,na,eune]  mas?
##    Devuelve info asi [rating3v3,ratinsolo,rating5v5,campeon1,jugadas1,%victorias1,campeon2,etc...] de mas a menos usado
##      Si devuelve 0 es que el jugador no existe
##    datoselophant("luisonoff","euw")
    try:
## Depuro nombre
        nombre2=nombre.split(' ')
        nombre=nombre2[0]
##        Esto puede que falle
        for w in range(len(nombre2)-1):
            nombre+='%20{0}'.format(nombre2[w+1])
            
## EMPIEZO API
#################################################################################################33
            ####  PRIMERO DATOS DE LA S3
            ####
            
##        key="Z1TMfh3wAFvk4cRejiXn"
        season="CURRENT"

####        Obtengo y genero diccionario de conversion numeros-campeones
##        filehandle4 = urllib.urlopen('http://elophant.com/api/v1/champions?key={0}'.format(key))
##        var4=filehandle4.read()
##        ##if "true" in var4:
##        ##    var3=var3.replace('true','1')
##        dicconversion=ast.literal_eval(var4)
##        filehandle4.close()
##        dicconversion2={}
##        for i in range(len(dicconversion)-1):
##            i=i+1
##            dicconversion2['{0}'.format(dicconversion[i]['id'])]='{0}'.format(dicconversion[i]['name'])
            
##        Ahora uso API para ver summoner ID y account ID     
        filehandle = urllib.urlopen('http://elophant.com/api/v1/{0}/getSummonerByName?summonerName={1}&key={2}'.format(server,nombre,key))
        var=filehandle.read()
        dicinfo=ast.literal_eval(var)
        filehandle.close()
        summonerid=dicinfo["summonerId"]
        accountid=dicinfo["acctId"]

        
##        Ahora uso API para ver elo segun temporada
        filehandle2 = urllib.urlopen('http://elophant.com/api/v1/{0}/getPlayerStats?accountId={1}&season={2}&key={3}'.format(server,accountid,season,key))
        var2=filehandle2.read()
        if "true" in var2:
            var2=var2.replace('true','1')
        if "false" in var2:
            var2=var2.replace('false','0')
        dicelo=ast.literal_eval(var2)
        filehandle2.close()
        for k in range(len(dicelo["playerStatSummaries"]['playerStatSummarySet'])):
            if dicelo["playerStatSummaries"]['playerStatSummarySet'][k]['playerStatSummaryTypeString']=="RankedSolo5x5":
                maxelosolo5v5=dicelo["playerStatSummaries"]['playerStatSummarySet'][k]['maxRating']
                break
            elif k==(len(dicelo["playerStatSummaries"]['playerStatSummarySet'])-1):
                maxelosolo5v5=0


##        Ahora uso API para ver todos campeones segun temporada
        filehandle3 = urllib.urlopen('http://elophant.com/api/v1/{0}/getRankedStats?accountId={1}&season={2}&key={3}'.format(server,accountid,season,key))
        var3=filehandle3.read()
        if "true" in var3:
            var3=var3.replace('true','1')
        if "false" in var3:
            var3=var3.replace('false','0')
        diccampeones=ast.literal_eval(var3)
        filehandle3.close()
##        Compruebo que no se devuelva vector vacio
        if diccampeones==[]:
            campeones=[0]*5
            partidas=[1]*5
            ganadas=[0]*5
        else:
    ##      Ahora busco los 5 campeones mas utilizados
            tamano=len(diccampeones)
            jugadas=[0]*tamano
            for i in range(tamano):
                jugadas[i]=diccampeones[i]['GamesPlayed']
            jugadassorted=sorted(jugadas,reverse=True)
            if tamano>=5:
                    heroesjugados=5
            else:
                    heroesjugados=tamano
            indices=[0]*heroesjugados
            for j in range(heroesjugados):
                indices[j]=jugadas.index(jugadassorted[j])
                jugadas[indices[j]]=0

            campeones=[0]*5
            partidas=[0]*heroesjugados+[1]*(5-heroesjugados)
            ganadas=[0]*5
            for k in range(heroesjugados): 
                campeoni=diccampeones[indices[k]]['ChampionId']
                campeones[k]=dicconversion2['{0}'.format(campeoni)]
                partidas[k]=jugadassorted[k]
                ganadas[k]=diccampeones[indices[k]]['Wins']
                
##########################################################################################################3
            ####  AHORA DATOS DE LA S2
            ####
            
##        key="Z1TMfh3wAFvk4cRejiXn"
        season="TWO"

        
##        Ahora uso API para ver elo segun temporada
        filehandle2 = urllib.urlopen('http://elophant.com/api/v1/{0}/getPlayerStats?accountId={1}&season={2}&key={3}'.format(server,accountid,season,key))
        var2=filehandle2.read()
        if "true" in var2:
            var2=var2.replace('true','1')
        if "false" in var2:
            var2=var2.replace('false','0')
        dicelo2=ast.literal_eval(var2)
        filehandle2.close()
        for k in range(len(dicelo2["playerStatSummaries"]['playerStatSummarySet'])):
            if dicelo2["playerStatSummaries"]['playerStatSummarySet'][k]['playerStatSummaryTypeString']=="RankedSolo5x5":
                maxelosolo5v52=dicelo2["playerStatSummaries"]['playerStatSummarySet'][k]['maxRating']
                break
            elif k==(len(dicelo2["playerStatSummaries"]['playerStatSummarySet'])-1):
                maxelosolo5v52=0


##        Ahora uso API para ver todos campeones segun temporada
        filehandle3 = urllib.urlopen('http://elophant.com/api/v1/{0}/getRankedStats?accountId={1}&season={2}&key={3}'.format(server,accountid,season,key))
        var3=filehandle3.read()
        if "true" in var3:
            var3=var3.replace('true','1')
        if "false" in var3:
            var3=var3.replace('false','0')
        diccampeones2=ast.literal_eval(var3)
        filehandle3.close()
##        Compruebo que no se devuelva vector vacio
        if diccampeones2==[]:
            campeones2=[0]*5
            partidas2=[1]*5
            ganadas2=[0]*5
        else:
    ##      Ahora busco los 5 campeones mas utilizados
            tamano=len(diccampeones2)
            jugadas=[0]*tamano
            for i in range(tamano):
                jugadas[i]=diccampeones2[i]['GamesPlayed']
            jugadassorted=sorted(jugadas,reverse=True)
            if tamano>=5:
                    heroesjugados=5
            else:
                    heroesjugados=tamano
            indices=[0]*heroesjugados
            for j in range(heroesjugados):
                indices[j]=jugadas.index(jugadassorted[j])
                jugadas[indices[j]]=0

            campeones2=[0]*5
            partidas2=[0]*heroesjugados+[1]*(5-heroesjugados)
            ganadas2=[0]*5
            for k in range(heroesjugados): 
                campeoni=diccampeones2[indices[k]]['ChampionId']
                campeones2[k]=dicconversion2['{0}'.format(campeoni)]
                partidas2[k]=jugadassorted[k]
                ganadas2[k]=diccampeones2[indices[k]]['Wins']

##        Ahora ordeno informacion para devolver (ANTIGUO)
##            CONVERTIR TODO A INT??  no me acuerdo pero lo he hecho
        datos=[0,int(maxelosolo5v5),0,campeones[0],int(partidas[0]),int(round(ganadas[0]/partidas[0]*100)),
               campeones[1],int(partidas[1]),int(round(ganadas[1]/partidas[1]*100)),campeones[2],int(partidas[2]),int(round(ganadas[2]/partidas[2]*100)),
               campeones[3],int(partidas[3]),int(round(ganadas[3]/partidas[3]*100)),campeones[4],int(partidas[4]),int(round(ganadas[4]/partidas[4]*100)),
               0,int(maxelosolo5v52),0,campeones2[0],int(partidas2[0]),int(round(ganadas2[0]/partidas2[0]*100)),
               campeones2[1],int(partidas2[1]),int(round(ganadas2[1]/partidas2[1]*100)),campeones2[2],int(partidas2[2]),int(round(ganadas2[2]/partidas2[2]*100)),
               campeones2[3],int(partidas2[3]),int(round(ganadas2[3]/partidas2[3]*100)),campeones2[4],int(partidas2[4]),int(round(ganadas2[4]/partidas2[4]*100))]
#Antes habia un cero al final de datos, lo he quitado y puede que algo deje de funcionar
        return datos

    except:
        return 0
        pass
